#!/usr/bin/env python
# -*- coding:utf-8 -*-
from  multiprocessing import Process,Pool
import time

def Foo(i):
    time.sleep(2)
    return i+100

def Bar(arg):   #arg是Foo函数的返回值
    print arg

if __name__=="__main__":
    pool = Pool(5)  #创建5个池进程
    #Pool类怎么来的？from multiprocessing导入的时候，加载了__init__.py中的Pool函数，这个函数又把pool.py中的class Pool加载进内存


    print pool.apply(Foo,(1,))  #同步模式，一个一个执行
    #
    # print pool.apply_async(func =Foo, args=(1,)).get()  #异步模式，同时执行所有进程
    #
    for i in range(10): #进程池只有5个进程连接，所以会5个5个执行
        pool.apply_async(func=Foo, args=(i,),callback=Bar)  #执行完func再执行callback
    #
    print 'end'
    pool.close()    #不再接受新的请求
    #pool.terminate()    #立即关闭，不管执行完没有，如果写了这句，后面的join就没有意义了。
    pool.join()     #进程池中进程执行完毕后再关闭，如果注释，那么程序直接关闭。